const fs = require('fs');
//通过node.js内置的fs模块读取文件
//非阻塞IO，读文件的时候主线程并不会等待读取完成，而会提供给IO线程一个回调函数
//然后立刻就去忙别的了，或者说服务别的客人了
//文件读取完毕了，会调用回调函数获取读取到的内容
console.log('before');
try {
    fs.readFile('./package2.json', 'utf-8', (err, data) => {
        /* if (err) {
            console.error(err);
        } else {
            console.log(data.toString())
        } */
    });
} catch (error) {
    console.log(error)
}
console.log('after');
//为什么 使用这种异步编程
//为了性能 异步操作允许程序继续执行其它的任务，而不是被 阻塞，等待长任务的完成
//为了响应速度 不要因为一个耗时的操作就阻塞整个系统
/* fs.readFile('./1.txt','utf-8',(err,data)=>{
    fs.readFile('./2.txt','utf-8',(err,data)=>{
        fs.readFile('./3.txt','utf-8',(err,data)=>{
            fs.readFile('./4.txt','utf-8',(err,data)=>{
                fs.readFile('./5.txt','utf-8',(err,data)=>{
                    fs.readFile('./6.txt','utf-8',(err,data)=>{

                    })
                })
            })
        })
    })
}) */
//为了解决回调地狱和异常处理不能try catch的问题，产出像Promise Generator Async/Await 